/**
  ******************************************************************************
  * @file    timer0.c
  * @author  ashuai0110
  * @version V1.0
  * @date    2024-01-12
  * @brief   timer0驱动,适用于PIC16(L)F1788_9
  *
  ******************************************************************************
  * @attention
  *
  * Change Logs:
  * Date          Author        Notes
  * 2024-01-12    ashuai0110    完成基本内容
  *
  ******************************************************************************
  */

/* 包含头文件-----------------------------------------------------------------*/
#include "timer0.h"

/* 私有宏定义-----------------------------------------------------------------*/

/* 私有类型定义---------------------------------------------------------------*/

/* 私有变量-------------------------------------------------------------------*/

/* 全局变量-------------------------------------------------------------------*/

/* 私有函数原型---------------------------------------------------------------*/

/**
  * @brief  timer0初始化
  * @note   定时周期sec = 1/(Fosc/4/预分频/(0xFF-初值))
  * @param  value : timer0计数初值
  * @retval None
  */
void timer0_init(uint8_t value)
{
    TMR0CS = 0; /* timer0时钟源选择位 0:内部时钟(Fosc/4) 1:T0CKI引脚上的电平跳变 */
    TMR0SE = 0; /* timer0时钟源边沿选择位 0:上升沿递增  1:下降沿递增 */
    PSA = 1; /* 预分频器分配位 0:预分频器分配给timer0 1:预分频器不分配给timer0 */
    OPTION_REGbits.PS = 0; /* 预分频比 0:2 1:4 2:8 3:16 4:32 5:64 6:128 7:256 */
    TIMER0_SET_INITIAL_VAL(value);
    
    timer0_update_it_cmd(0);
}

/**
  * @brief  timer0取消初始化(恢复缺省)
  * @param  None
  * @retval None
  */
void timer0_de_init(void)
{
    TMR0CS = 1;
    TMR0SE = 1;
    PSA = 1;
    OPTION_REGbits.PS = 1;
    TMR0 = 0;
    TMR0IF = 0;
    TMR0IE = 0;
}

/**
  * @brief  timer0溢出(更新)中断控制
  * @param  state : 0禁止中断 1允许中断
  * @retval None
  */
void timer0_update_it_cmd(uint8_t state)
{
    TMR0IF = 0; /* 清除timer0溢出位 0:未溢出 1:溢出 */
    TMR0IE = state; /* timer0溢出中断允许位 0:禁止中断 1:允许中断 */
}


